/**
 * 对话框组件
 * @author levinhuang
 * @requires jf.core.js
 */
JF.M("dlg",(function($){
	var p={},
		pub={};
	p.cache={};
	p.model=function($d){
		this.$d=$d;
		this._init();
	};
	p.model.prototype={
		_init:function(){
			this._initEvt();
		},
		_initEvt:function(){
			var me=this;

			//ui references
			this.ui={
				$hd:this.$d.find("h1"),
				$bd:this.$d.find(".ui-dialog-bd"),
				$ft:this.$d.find(".ui-dialog-ft")
			};

			//btn close
			this.$d.find(p.opts.css_dlgClose).live("vclick",function(e){
				me.hide();
				return false;
			});

			//btn ok
			this.$d.find(p.opts.css_dlgOK).live("vclick",function(e){
				var goOn=true;
				if(me.opts.beforeOK){
					goOn=me.opts.beforeOK.call(me);
				};
				if(!goOn) return false;

				me.hide();

				return false;
			});
		},
		_bindAnimation:function(){
			var me=this;
			//animationComplete
			this.$d.animationComplete(function(){
				var $i=$(this).removeClass("pop in out reverse");

				var isHide=$i.jqmData("hide");
				if(isHide){
					me.$d.removeClass("ui-dialog-active");
					if(me.opts.afterHide){
						me.opts.afterHide.call(me);
					};
				}else{
					if(me.opts.afterShow){
						me.opts.afterShow.call(me);
					};
				};

			});
		},
		_updateUI:function(){
			if(this.opts.stickyUI) return;

			this.ui.$hd.html(this.opts.title||"提示信息");
			this.ui.$bd.html(this.opts.ct||"");
			if(this.opts.hideFT){
				this.ui.$ft.hide();
			}else{
				this.ui.$ft.show();
			}
		},
		show:function(opts){
			this.opts=opts||{};
			this.$d.jqmData("hide",false);

			this._updateUI();

			this._bindAnimation();

			this.$d.removeClass("out").addClass("ui-dialog-active pop in");
		},
		hide:function(){
			var goOn=true;
			if(this.opts && this.opts.beforeHide){
				goOn=this.opts.beforeHide.call(this);
			}
			if(!goOn) return;
			
			this._bindAnimation();

			this.$d.jqmData("hide",true).removeClass("in").addClass("pop out reverse");

		}
	};

	pub.init=function(opts){
		p.opts=$.extend({
			css_dlgClose:'.back,.close',
			css_dlgOK:'.btn_ok',
			cl_popin:'pop in',
			cl_popout:'pop out reverse'
		},opts||{});
	};

	pub.onLoad=function(){
		
		$(":jqmData(role='dialog')").each(function(i,o){
			p.cache[o.id]=new p.model($(o));
		});

	};
	/**
	 * alert
	 * @param {string|false} txt 当为字符串时，txt为提示内容；当为false时，隐藏提示框
	 * @param {Object} opt 配置对象
	 */
	pub.alert=function(txt,opt){

		if(txt===false){
			p.cache["J_tipbox"].hide();
			return this;
		};

		opt=opt||{};
		opt.ct=txt;
		opt.hideFT=true;
		p.cache["J_tipbox"].show(opt);
	};
	/**
	 * confirm
	 * @param {string|false} txt 当为字符串时，txt为提示内容；当为false时，隐藏提示框
	 * @param {Object} opt 配置对象
	 */
	pub.confirm=function(txt,opt){
		if(txt===false){
			p.cache["J_tipbox"].hide();
			return this;
		};
		opt=opt||{};
		opt.ct=txt;
		opt.hideFT=false;
		p.cache["J_tipbox"].show(opt);
	};
	/**
	 * 显示登录验证码弹窗
	 * @param {Object} 配置对象
	 */
	pub.verifyBox=function(opt){
		opt=opt||{};
		opt.stickyUI=true;
		p.cache["J_verifybox"].show(opt);
	};
	/**
	 * 隐藏所有的对话框实体
	 */
	pub.hideAll=function(){
		for(var c in p.cache){
			if(!c) continue;
			p.cache[c].hide();
		}
		return this;
	};

	return pub;
})(jQuery));